package com.javasm.proxy1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 代理模式:对一个已经存在的对象来说,当对象中的某个方法不满足需求的时候,在不改动原对象代码的情况下,引入代理模式进行扩展.
 *
 * 静态代理 SourceProxy()
 * 静态代理模式下的对象存在方式：
 * 1.被代理对象:源对象
 * 2.代理对象:是新派生的代理类,与被代理对象同类型,并持有被代理对象
 *
 * @remark:
 */
public class TestSource {
    public static void main(String[] args) {
        //设置jvm虚拟机参数,保存代理类,可以查看代理类的结构
        System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles", "true");
        //原对象SourceImpl()
        ISource source = new SourceImpl();

        //静态代理对象SourceProxy=>  代理对象SourceProxy 将原来对象SourceImpl() 进行包装一下把 原对象SourceImpl()传至新的对象SourceProxy中
        ISource sourceProxy = new SourceProxy(source);

        //静态代理对象调用 原对象对象SourceImpl()的begin（）方法
        sourceProxy.begin(1);
        //静态代理对象调用，自定义的end()方法
        sourceProxy.end();//不调用source中的end,打印放回连接池
    }

}
